#include <stdio.h>

const int MAX = 3;

int main()
{

    int var[] = {10, 100, 200};
    int i, *ptr[MAX];

    for (i = 0; i < MAX; i++)
    {
        ptr[i] = &var[i]; /* assign the address of integer. */
    }

    for (i = 0; i < MAX; i++)
    {
        printf("Value of var[%d] = %d\n", i, *ptr[i]);
    }

    return 0;
}

/*
1. 头文件与常量定义
#include <stdio.h>  // 包含标准输入输出库，用于printf函数
const int MAX = 3;  // 定义常量MAX为3，作为数组大小的统一标识

2. 主函数（main）核心逻辑
2.1 变量声明
int var[] = {10, 100, 200};  // 定义并初始化int类型数组var，包含3个元素
int i, *ptr[MAX];            // i：循环计数器；*ptr[MAX]：指针数组（含MAX个int类型指针）
var[]：普通int数组，存储实际数据 [10, 100, 200]。
*ptr[MAX]：指针数组（重点）。
ptr 是一个数组，数组中的每个元素都是 int*（指向int的指针），共 MAX（3）个元素。
2.2 指针数组初始化（绑定指针与数组元素地址）
for (i = 0; i < MAX; i++) {
  ptr[i] = &var[i];  // 将var数组第i个元素的地址赋值给ptr数组的第i个指针
}
作用：让指针数组 ptr 的每个元素指向 var 数组的对应元素。
ptr[0] 指向 var[0]（地址为 &var[0]）
ptr[1] 指向 var[1]（地址为 &var[1]）
ptr[2] 指向 var[2]（地址为 &var[2]）
2.3 通过指针数组访问并打印数据
for (i = 0; i < MAX; i++) {
  printf("Value of var[%d] = %d\n", i, *ptr[i]);  // 解引用指针获取var元素值
}
*ptr[i]：对指针数组的第i个指针进行解引用（*），获取其指向的 var[i] 的值。
例如：*ptr[0] 等价于 var[0]（值为10），*ptr[1] 等价于 var[1]（值为100）。
3. 程序输出结果
运行后，输出如下：
plainText
Value of var[0] = 10
Value of var[1] = 100
Value of var[2] = 200

核心总结
指针数组（*ptr[MAX]）：本质是“数组”，但数组元素是指针（而非普通数据）。本例中，数组 ptr 的每个元素指向 var 数组的对应元素。
关键逻辑：通过 ptr[i] = &var[i] 绑定指针与目标地址，再通过 *ptr[i] 间接访问目标数据，实现对 var 数组元素的读取。
优势：指针数组常用于需要动态管理多个内存地址的场景（如字符串数组、多维数组简化访问等），比直接使用普通数组更灵活。
*/
